| "use strict" | 
|     // global key for user preferred registration | 
| var REGISTRATION_KEY = '@@any-promise/REGISTRATION', | 
|     // Prior registration (preferred or detected) | 
|     registered = null | 
|   | 
| /** | 
|  * Registers the given implementation.  An implementation must | 
|  * be registered prior to any call to `require("any-promise")`, | 
|  * typically on application load. | 
|  * | 
|  * If called with no arguments, will return registration in | 
|  * following priority: | 
|  * | 
|  * For Node.js: | 
|  * | 
|  * 1. Previous registration | 
|  * 2. global.Promise if node.js version >= 0.12 | 
|  * 3. Auto detected promise based on first sucessful require of | 
|  *    known promise libraries. Note this is a last resort, as the | 
|  *    loaded library is non-deterministic. node.js >= 0.12 will | 
|  *    always use global.Promise over this priority list. | 
|  * 4. Throws error. | 
|  * | 
|  * For Browser: | 
|  * | 
|  * 1. Previous registration | 
|  * 2. window.Promise | 
|  * 3. Throws error. | 
|  * | 
|  * Options: | 
|  * | 
|  * Promise: Desired Promise constructor | 
|  * global: Boolean - Should the registration be cached in a global variable to | 
|  * allow cross dependency/bundle registration?  (default true) | 
|  */ | 
| module.exports = function(root, loadImplementation){ | 
|   return function register(implementation, opts){ | 
|     implementation = implementation || null | 
|     opts = opts || {} | 
|     // global registration unless explicitly  {global: false} in options (default true) | 
|     var registerGlobal = opts.global !== false; | 
|   | 
|     // load any previous global registration | 
|     if(registered === null && registerGlobal){ | 
|       registered = root[REGISTRATION_KEY] || null | 
|     } | 
|   | 
|     if(registered !== null | 
|         && implementation !== null | 
|         && registered.implementation !== implementation){ | 
|       // Throw error if attempting to redefine implementation | 
|       throw new Error('any-promise already defined as "'+registered.implementation+ | 
|         '".  You can only register an implementation before the first '+ | 
|         ' call to require("any-promise") and an implementation cannot be changed') | 
|     } | 
|   | 
|     if(registered === null){ | 
|       // use provided implementation | 
|       if(implementation !== null && typeof opts.Promise !== 'undefined'){ | 
|         registered = { | 
|           Promise: opts.Promise, | 
|           implementation: implementation | 
|         } | 
|       } else { | 
|         // require implementation if implementation is specified but not provided | 
|         registered = loadImplementation(implementation) | 
|       } | 
|   | 
|       if(registerGlobal){ | 
|         // register preference globally in case multiple installations | 
|         root[REGISTRATION_KEY] = registered | 
|       } | 
|     } | 
|   | 
|     return registered | 
|   } | 
| } |