/**
 * @license
 * Copyright 2012 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

function IN_BROWSER() { return typeof vm == "undefined" || ! vm.runInThisContext; }
function IN_NODEJS() { return ! IN_BROWSER(); }
function IN_CHROME_APP() { return window.chrome && window.chrome.runtime && (!! window.chrome.runtime.id) };
function IN_BROWSER_NOT_APP() { return IN_BROWSER() && ! IN_CHROME_APP(); }

var files = [
//  ['ServiceWorker', function() { return window.navigator && navigator.serviceWorker; }],
  [ 'firefox',  function() { return window.navigator && navigator.userAgent.indexOf('Firefox') != -1; }],
  [ 'funcName', function() { return ! Number.name; }],
  [ 'safari',   function() { return window.navigator && navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1; }],
  [ 'node',     IN_NODEJS ],
  [ 'i18n',     IN_BROWSER ],
  'stdlib',
  ['WeakMap',  function() { return ! this['WeakMap']; }],
  'async',
  'parse',
  'event',
  'JSONUtil',
  'XMLUtil',
  'context',
  'JSONParser',
  'TemplateUtil',
  [ 'ChromeEval', IN_CHROME_APP ],
  'FOAM',
  // To use FO, uncomment the next line
  // and comment out all lines from FObject to mm6Misc
  // inclusively
//  'experimental/fo',
//  'experimental/protobuffeatures',
  'FObject',
  'BootstrapModel',
  'mm1Model',
  'mm2Property',
  'mm3Types',
  'mm4Method',
  'mm5Debug',
  'mm6Misc',
  '../js/foam/core/bootstrap/OrDAO',
  [ '../js/foam/core/bootstrap/BrowserFileDAO', IN_BROWSER_NOT_APP ],
  [ '../js/node/dao/ModelFileDAO', IN_NODEJS ],
  '../js/foam/ui/Window',
  'value',
  'view',
  '../js/foam/ui/FoamTagView',
  'cview',
  '../js/foam/grammars/CSS3',
  'HTMLParser',
  'mlang',
  'mlang1',
  'mlang2',
  'glang',
  'QueryParser',
  'oam',
  'visitor',
  'messaging',
//  '../js/foam/dao/ProxyDAO',
  'dao',
  'arrayDAO',
  'index',
  'models',
  'oauth',
  [ 'ModelDAO', IN_BROWSER_NOT_APP ],
  [ '../js/foam/core/bootstrap/ChromeAppFileDAO', IN_CHROME_APP ],
  [ 'ChromeAppModelDAO', IN_CHROME_APP ],
  [ 'NodeModelDAO', IN_NODEJS ]
];

@@ -941,16 +941,43 @@
 P(); %7D%0A%0A
+var __EXTRA_PROPERTIES__;%0A%0A
 var file
@@ -1903,16 +1903,102 @@
 perty',%0A
+  %5B __EXTRA_PROPERTIES__, function() %7B return __EXTRA_PROPERTIES__ != undefined; %7D %5D,%0A
   'mm3Ty

Add __EXTRA_PROPERTIES__ global to let bootloaders insert additional stuff to load after mm2Property.